home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Meeting Pearls 4
/
Meeting Pearls Vol. IV (1996)(GTI - Schatztruhe)[!].iso
/
Pearls
/
util
/
misc
/
CyberCron
/
Source
/
DoMsg.a
< prev
next >
Wrap
Text File
|
1992-09-29
|
2KB
|
171 lines
INCLUDE "exec/types.i"
INCLUDE "rexx/rxslib.i"
MSGBUFSIZE equ 18
XDEF @DoMsg
XREF ___ctype
XREF _RexxSysBase
XREF __CXM33
XREF _LVOReplyMsg
XREF _AbsExecBase
SECTION DoMsg,CODE
; this code is the dispatcher for ARexx messages. It has been moved
; to assembly to allow use of registerized parameters and to optimize it by
; hand a bit. It takes as its arguments:
;
; A0 = pointer to ARexx message
; A1 = pointer to CmdTbl
; D0 = Number of ARexx commands
; D1 = BringerDown flag
@DoMsg
link a5,#-MSGBUFSIZE-4
movem.l d5-d7/a2-a3/a6,-(sp)
movea.l a0,a3
movea.l a1,a2
move.l d0,d7
move.l d1,d6
movea.l _RexxSysBase(a4),a6
jsr _LVOIsRexxMsg(a6)
tst.l d0
beq.w DMAcleanup
2$ moveq #20,d0
move.l d0,rm_Result1(a3)
clr.l rm_Result2(a3)
tst.w d6 ; BringerDown ?
beq.s 3$
moveq #22,d0
move.l d0,rm_Result1(a3)
bra.w DMAcleanup
3$ lea -(MSGBUFSIZE+4)(a5),a0
movea.l rm_Args(a3),a1
moveq #MSGBUFSIZE,d0
jsr _LVOStrcpyU(a6)
moveq #0,d6
4$ cmp.l d7,d6
bge.s 5$
move.l d6,d0
moveq #$0e,d1
jsr __CXM33(pc)
move.w 00(a2,d0.l),d1
ext.l d1
lea -(MSGBUFSIZE+4)(a5),a0
movea.l 02(a2,d0.l),a1
move.l d1,d0
jsr _LVOStrcmpN(a6)
tst.l d0
beq.s 5$
addq.l #1,d6
bra.s 4$
5$ cmp.l d7,d6
bge.w DMAcleanup
move.l d6,d0
moveq #$0e,d1
jsr __CXM33(pc)
move.l d0,d7
movea.l rm_Args(a3),a1
adda.w 00(a2,d7.l),a1
lea 1(a1),a1
movem.l a1,-4(a5)
move.w 6(a2,d7.l),d1
cmpi.b #3,d1
bne.s 6$
movea.l a3,a0
movea.l 10(a2,d7.l),a1
jsr (a1)
bra.s DMAreturn
6$ cmpi.b #2,d1
bne.s 7$
movem.l -4(a5),a0
jsr _LVOCVa2i(a6)
movea.l 10(a2,d7.l),a1
jsr (a1)
bra.s DMAreturn
7$ cmpi.b #1,d1
bne.s 9$
movem.l -4(a5),a0
lea ___ctype+1(a4),a1
moveq #8,d5
8$ move.b (a0),d0
ext.w d0
ext.l d0
move.b 0(a1,d0.l),d0
ext.w d0
ext.l d0
and.l d5,d0
beq.s 9$
addq.l #1,a0
bra.s 8$
9$ movea.l 10(a2,d7.l),a1
jsr (a1)
DMAreturn
move.w 8(a2,d7.l),d1
cmpi.b #2,d1
bne.s 1$
move.l d0,rm_Result1(a3)
bra.s DMAcleanup
1$ cmpi.b #1,d1
beq.s 2$
cmpi.b #3,d1
bne.s 5$
2$ btst #1,rm_Action+1(a3)
bne.b 3$
cmpi.b #3,d1
bne.s 6$
movea.l d0,a0
jsr _LVODeleteArgstring(a6)
6$ moveq #21,d0
move.l d0,rm_Result1(a3)
bra.s DMAcleanup
3$ movea.l d0,a0
cmpi.b #3,d1
beq.s 4$
move.l a0,d0
beq.s 44$
jsr _LVOStrlen(a6)
44$ jsr _LVOCreateArgstring(a6)
4$ move.l a0,rm_Result2(a3)
5$ clr.l rm_Result1(a3)
DMAcleanup
movea.l a3,a1
movea.l _AbsExecBase.w,a6
jsr _LVOReplyMsg(a6)
movem.l (sp)+,d5-d7/a2-a3/a6
unlk a5
rts
END